package com.miku.blog.domain.pojo;

import java.util.Arrays;
import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * @author shkstart
 * @create ${}YEAR-05-24 23:37
 */
public class SystemConstance {

    /**
     * 密钥
     * 加盐
     */
    public static final String UNIVERSAL_KEY = "MIKU_FANS_BY_KANO";

    /**
     * WebSiteId
     * 网站ID
     */
    public static final Integer WEBSITE_ID = 1;

    /**
     * 发件人名称
     */
    public static final String EMAIL_FROM_NAME = "MikuFans.com";

    /**
     * 博客名
     */
    public static final String BLOG_NAME = "Kano-Blog";

    /**
     * 注册用户 的 用户名 默认前缀
     */
    public static final String USERNAME_PREFIX = "KB_";

    /**
     * 访客默认昵称
     */
    public static final String TOURIST_DEFAULT_NICKNAME = "游客";

    /**
     * 留言默认昵称
     */
    public static final String MESSAGE_DEFAULT_NICKNAME = "游客";

    /**
     * 是否 开启 某一网站配置(评论审核 / 聊天室 等) ( 0 关闭   1 开启)
     */
    public static final Integer CLOSE_WEBSITE_CONFIG = 0;

    /**
     * 是否 开启 某一网站配置(评论审核 / 聊天室 等) ( 0 关闭   1 开启)
     */
    public static final Integer OPEN_WEBSITE_CONFIG = 1;

    /**
     * 密码长度要求 >= 6
     */
    public static final Integer PASSWORD_LENGTH = 6;


    /**
     * 邮箱验证码请求类型 { 0 注册    1 修改邮箱绑定    2 忘记密码 }
     */
    public static final Integer EMAIL_SEND_TYPE_BY_REGISTER = 0;

    /**
     * 邮箱验证码请求类型 { 0 注册    1 修改邮箱绑定    2 忘记密码 }
     */
    public static final Integer EMAIL_SEND_TYPE_BY_UPDATE_EMAIL = 1;


    /**
     * 邮箱验证码请求类型 { 0 注册    1 修改邮箱绑定    2 忘记密码 }
     */
    public static final Integer EMAIL_SEND_TYPE_BY_FORGOT_PASSWORD = 2;


    /**
     * 邮箱验证码有效时间
     * 15分钟
     */
    public static final long CODE_VALIDITY_TIME = 15 * 60 * 1000;


    /**
     * 用户地域分布 :{1 : 用户   2 : 游客}
     */
    public static final Integer AREA_USER_TYPE = 1;

    /**
     * 用户地域分布 :{1 : 用户   2 : 游客}
     */
    public static final Integer AREA_TOURIST_TYPE = 2;

    /**
     * 表示 未删除 的字段值
     */
    public static final Integer NOT_DELETE = 0;

    /**
     * 表示 删除 的字段值
     */
    public static final Integer IS_DELETE = 1;


    /**
     * 已审核(已通过)  字段值
     */
    public static final Integer IS_REVIEW = 1;

    /**
     * 未审核   字段值
     */
    public static final Integer NOT_REVIEW = 0;

    /**
     * 表示 文章 非置顶
     */
    public static final Integer NOT_TOP = 0;

    /**
     * 表示 文章置顶
     */
    public static final Integer IS_TOP = 1;

    /**
     * 表示 非禁用
     */
    public static final Integer NOT_DISABLE = 0;

    /**
     * 表示 禁用
     */
    public static final Integer IS_DISABLE = 1;

    /**
     * 表示 显示
     */
    public static final Integer NOT_HIDDEN = 0;

    /**
     * 表示 隐藏
     */
    public static final Integer IS_HIDDEN = 1;

    /**
     * 表示 非匿名访问
     */
    public static final Integer NOT_ANONYMOUS = 0;

    /**
     * 表示  匿名访问
     */
    public static final Integer IS_ANONYMOUS = 1;

    /**
     * 状态 1.公开
     */
    public static final Integer STATUS_PUBLIC = 1;

    /**
     * 状态 2.私密
     */
    public static final Integer STATUS_PRIVATE = 2;

    /**
     * 文章 状态  3 草稿
     */
    public static final Integer ARTICLE_STATUS_DRAFT = 3;


    /**
     * 表示 根评论ID
     */
    public static final Integer COMMENT_ROOT_ID = -1;

    /**
     * 资源模块 根ID
     */
    public static final Integer RESOURCE_ROOT_ID = -1;

    /**
     * 菜单 根ID
     */
    public static final Integer MENU_ROOT_ID = -1;


    /**
     * 未点赞 接收值
     *  { 0:未点赞    1:已点赞 }
     */
    public static final Integer NOT_LIKE = 0;


    /**
     * 已点赞接收值
     *  { 0:未点赞    1:已点赞 }
     */
    public static final Integer IS_LIKE = 1;

    /**
     * 用户登录类型  { 1 邮箱   2 QQ   3 微博  }
     */
    public static final Integer LOGIN_TYPE_BY_EMAIL = 1;

    /**
     * 用户登录类型  { 1 邮箱   2 QQ   3 微博  }
     */
    public static final Integer LOGIN_TYPE_BY_QQ = 2;

    /**
     * 用户登录类型  { 1 邮箱   2 QQ   3 微博  }
     */
    public static final Integer LOGIN_TYPE_BY_WEIBO = 3;



    /**
     * 显示排序最大值
     */
    public static final Integer ORDERNUM_MAX = 10;

    /**
     * 推荐文章  只推荐 阅读量 1000+ 或 点赞量 100+的文章
     */
    public static final Integer RECOMMEND_ARTICLE_VIEW_COUNT = 500;

    /**
     * 推荐文章  只推荐 阅读量 1000+ 或 点赞量 100+的文章
     */
    public static final Integer RECOMMEND_ARTICLE_LIKE_COUNT = 50;

    /**
     * 最新文章  只显示5篇
     */
    public static final Integer NEW_ARTICLE_SIZE = 5;


    /**
     * 推荐文章  只显示6篇
     */
    public static final Integer RECOMMEND_ARTICLE_SIZE = 6;



    /**
     * 显示排序最小值
     */
    public static final Integer ORDERNUM_MIN = 1;

    /**
     * 分页默认 显示页数
     */
    public static final Integer PAGE_CURRENT_MIN = 1;

    /**
     * 访问文章时 ， 评论区  子评论默认 显示个数
     */
    public static final Integer COMMENT_PAGE_SIZE = 3;

    /**
     * 文章分页默认 每页显示个数
     */
    public static final Integer PAGE_SIZE = 10;

    /**
     * 分页 每页显示最小个数
     * (用于获取上下篇章)
     */
    public static final Integer PAGE_SIZE_MIN = 1;

    /**
     * 角色 - 管理员
     */
    public static final String ROLE_ADMIN = "admin";

    /**
     * 角色ID - 管理员
     */
    public static final Integer ROLE_ADMIN_ID = 1;


    /**
     * 角色 - 测试员
     */
    public static final String ROLE_TEST = "test";

    /**
     * 角色 - 用户
     */
    public static final String ROLE_USER = "user";

    /**
     * 文章类型 :(1原创   2转载  3翻译)
     */
    public static final Integer ARTICLE_TYPE_BY_ORIGINAL = 1;

    /**
     * 文章类型 :(1原创   2转载  3翻译)
     */
    public static final Integer ARTICLE_TYPE_BY_REPRODUCED = 2;

    /**
     * 文章类型 :(1原创   2转载  3翻译)
     */
    public static final Integer ARTICLE_TYPE_BY_TRANSLATION = 3;

    /**
     * 评论类型 : 1文章
     */
    public static final Integer COMMENT_TYPE_BY_ARTICLE_CODE = 1;

    /**
     * 评论类型 : 2友链
     */
    public static final Integer COMMENT_TYPE_BY_FRIEND_LINK_CODE = 2;

    /**
     * 评论类型 : 3说说
     */
    public static final Integer COMMENT_TYPE_BY_TALK_CODE = 3;

    /**
     * 点赞类型 : 1文章
     */
    public static final Integer LIKE_COUNT_TYPE_BY_ARTICLE = 1 ;

    /**
     * 点赞类型 : 2评论
     */
    public static final Integer LIKE_COUNT_TYPE_BY_COMMENT = 2 ;

    /**
     * 点赞类型 : 3说说
     */
    public static final Integer LIKE_COUNT_TYPE_BY_TALK = 3 ;

//    /**
//     * 文章类型 : 文章
//     */
//    public static final String ARTICLE_TYPE_BY_ARTICLE = "Article";
//
//    /**
//     * 文章类型 : 友链
//     */
//    public static final String ARTICLE_TYPE_BY_FRIEND_LINK = "FriendLink";
//
//    /**
//     * 文章类型 : 说说
//     */
//    public static final String ARTICLE_TYPE_BY_TALK = "Talk";


    /**
     * 文章内容简要长度
     */
    public static final Integer ARTICLE_LENGTH = 125;

    /**
     * 社交类型列表
     */
    public static final List<String> SOCIAL_TYPE = Arrays.asList(
            "qq",
            "gitee",
            "github"
    );

    /**
     * 前端令牌缓存键
     */
    public static final String REQUEST_HEADER_TOKEN_KEY = "token";

    /**
     * Menu表   图标列表
     */
    public static final List<String> iconList = Arrays.asList(
            "el-icon-myshouye",
            "el-icon-myfabiaowenzhang",
            "el-icon-myyonghuliebiao",
            "el-icon-myxiaoxi",
            "el-icon-myliuyan",
            "el-icon-mywenzhang-copy",
            "el-icon-myshezhi",
            "el-icon-myuser",
            "el-icon-myfenlei",
            "el-icon-myicontag",
            "el-icon-mypinglunzu",
            "el-icon-myjiaoseliebiao",
            "el-icon-myxitong",
            "el-icon-mycaidan",
            "el-icon-mydashujukeshihuaico-",
            "el-icon-myguanyuwo",
            "el-icon-mydaohanglantubiao_quanxianguanli",
            "el-icon-mypinglun",
            "el-icon-myfabusekuai",
            "el-icon-myiconfontdongtaidianji",
            "el-icon-myimage-fill",
            "el-icon-myzhaopian",
            "el-icon-myhuishouzhan",
            "el-icon-myyemianpeizhi"
    );

    /**
     * swagger api 接口文档请求路径列表
     */
    public static final List<String> SWAGGER_URI = Arrays.asList(
            "/swagger-ui/index.html",
            "/swagger-ui/swagger-ui-bundle.js",
            "/swagger-ui/swagger-ui-standalone-preset.js",
            "/swagger-ui/springfox.css",
            "/swagger-ui/springfox.js",
            "/swagger-ui/swagger-ui.css",
            "/swagger-resources/configuration/ui",
            "/swagger-ui/favicon-32x32.png",
            "/swagger-resources/configuration/security",
            "/swagger-resources",
            "/v3/api-docs"
    );

    /**
     * Provincial 省份后缀列表
     */
    public static final List<String> PROVINCIAL_SUFFIX = Arrays.asList("省","市","自治区","特别行政区");


    /**
     * 支持上传的图片格式
     */
    public static final List<String> SUPPORTED_IMAGE_FILE_FORMATS = Arrays.asList(
            ".jpg",
            ".png",
            ".jpeg"
    );


    /**
     * 网站配置信息图片 文件上传 起始路径
     */
    public static final String WEBSITE_CONFIG_IMAGE_FILEPATH_PREFIX = "websiteConfigImage";

    /**
     * 页面封面 文件上传 起始路径
     */
    public static final String WEBSITE_PAGE_COVER_FILEPATH_PREFIX = "websitePageCover";


    /**
     * 文章封面 文件上传 起始路径
     */
    public static final String ARTICLE_COVER_FILEPATH_PREFIX = "articleCover";

    /**
     * 用户头像 文件上传 起始路径
     */
    public static final String USER_AVATAR_FILEPATH_PREFIX = "userAvatar";

    /**
     * 说说图片 文件上传 起始路径
     */
    public static final String TALK_IMAGE_FILEPATH_PREFIX = "talkImage";

    /**
     * 相册封面 文件上传 起始路径
     */
    public static final String PHOTO_ALBUM_COVER_FILEPATH_PREFIX = "photoAlbumCover";

    /**
     * 组件路径为NULL时，为其附上此默认值
     */
    public static final String COMPONENT_INIT_NAME = "Layout";

    /**
     * 一周时间  -  单位：毫秒
     */
    public static final long WEEK_FOR_MILLISECONDS = 7 * 24 * 60 * 60 * 1000;


    /**
     * Redis 缓存对象 过期时间
     */
    public static final long REDIS_EXPIRE_TIME = 30 * 60 * 1000;

    /**
     * Redis 缓存对象 过期时间
     */
    public static final long REDIS_ID_KEY_EXPIRE_TIME = REDIS_EXPIRE_TIME + (30 * 1000);

    /**
     * Redis 缓存对象 过期时间单位：毫秒
     */
    public static final TimeUnit REDIS_TIMEUNIT = TimeUnit.MILLISECONDS;

    /**
     * Redis 缓存对象 过期时间是否小于此值
     * [Redis缓存时间单位 : 秒]
     */
    public static final Long REDIS_KEY_TIME_REMAINING = 10 * 60L;

//    /**
//     * Redis 缓存对象 存在但无设置过期时间时 ,若查询过期时间则返回-1
//     */
//    public static final Long REDIS_KEY_NONE_EXPIRATION_TIME = -1L;
//
//    /**
//     * Redis 缓存对象 不存在时 ,若查询过期时间则返回-2
//     * [Redis缓存时间单位 : 秒]
//     */
//    public static final Long REDIS_KEY_ABSENT = -2L;

    /**
     * 登录接口映射
     */
    public static final String LOGIN_URI = "/login";

    /**
     * 后台接口起始路径
     */
    public static final String ADMIN_URI = "/admin";


//    /**
//     * 上传访客数据 接口映射
//     */
//    public static final String REPORT_URI = "/report";
//
//    /**
//     * 上传留言 接口映射
//     */
//    public static final String MESSAGES_URI = "/messages";

    /**
     * request attribute 属性   请求是否支持匿名访问 key
     */
    public static final String REQUEST_ATTRIBUTE_RESOURCE_ANONYMOUS = "RESOURCE_ANONYMOUS";



    /**
     * Redis  接口 请求映射  起始路径 缓存键
     */
    public static final String RESOURCE_REQUEST_URI_LIST_KEY = "resourceURIList";

    /**
     * RESTful 占位符
     */
    public static final String RESTFUL = "*";


    /**
     * Redis 通配符
     */
    public static final String REDIS_PATTERN_KEY = "*";

    /**
     * Redis 缓存键   -  登录键(缓存用户信息)
     */
    public static final String REDIS_LOGINUSER_KEY = "LoginUser";

    /**
     * Redis 缓存键   -  (获取用户ID对应登录键)
     */
    public static final String REDIS_LOGINUSER_ID_KEY = "LoginID";

//    /**
//     * Redis 友链评论 [ 子评论列表 ]缓存键
//     */
//    public static final String REDIS_FRIEND_LINK_COMMENT_CHILDREN_KEY = "FriendLink-Children-Comment";
//
//    /**
//     * Redis 说说评论 [ 子评论列表 ]缓存键
//     */
//    public static final String REDIS_TALK_COMMENT_CHILDREN_KEY = "Talk-Children-Comment";
//
//    /**
//     * Redis 文章评论 [ 子评论列表 ]缓存键
//     */
//    public static final String REDIS_ARTICLE_COMMENT_CHILDREN_KEY = "Article-Children-Comment";

    /**
     * Redis - 文章阅读量 key
     */
    public static final String REDIS_ARTICLE_VIEW_COUNT_KEY = "Article-ViewCount";




    /**
     * Redis - 评论审核 key
     */
    public static final String REDIS_WEBSITE_CONFIG_REVIEW_HASH_KEY = "WebsiteConfig-Review";
    /**
     * Redis - 评论审核 key
     */
    public static final String REDIS_WEBSITE_IS_COMMENT_REVIEW_KEY = "IsCommentReview";
    /**
     * Redis - 留言审核 key
     */
    public static final String REDIS_WEBSITE_IS_MESSAGE_REVIEW_KEY = "IsMessageReview";






    /**
     * Redis 访问量 缓存键
     */
    public static final String REDIS_UNIQUE_VIEW_KEY = "UniqueView";

    /**
     * Redis 访问量 锁 key
     */
    public static final String REDIS_UNIQUE_LOCK_KEY = "UniqueViewLock";

    /**
     * Redis 文章阅读量 锁 key
     */
    public static final String REDIS_ARTICLE_LOCK_KEY = "ArticleViewLock";


    /**
     * 访问量 初始
     */
    public static final Integer UNIQUE_VIEW_INIT = 0;

    /**
     * 访问量 增加量
     */
    public static final Integer VIEW_INCREMENT = 1;


    /**
     * Redis 锁 有效时间
     * 单位:毫秒
     */
    public static final Long REDIS_LOCK_TIME_OUT = 10 * 1000L;

    /**
     * Redis 锁阻塞时睡眠时间
     * 单位:毫秒
     */
    public static final Integer REDIS_LOCK_SLEEP_TIME = 5 * 100;


    /**
     * Redis  定时缓存键 过期时间
     * 毫秒为单位
     */
    public static final Integer REDIS_CACHE_KEY_EXPIRE_TIME = (60 * 60 * 1000) + (10 * 60 * 1000);

}
